]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
switcherPopup: Ignore implicit enter events when the popup is mapped
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 28 Feb 2017 12:35:57 +0000 (13:35 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 23 May 2017 16:38:35 +0000 (18:38 +0200)
If the popup happens to be mapped beneath the pointer, mutter will now
emit an implicit enter notify event (i.e. not caused by pointer motion).
In this case the switcherPopup still goes and selects the item, which
results in too sensitive alt-tab menus if the pointer happens to be in
the wrong place.

Make highlighting rely on motion events instead, so it always involves
user interaction when triggered by the pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=755164

js/ui/switcherPopup.js

index ae7bc77146b8280768eae57681f636f7a193f1c8..4538ceb3801b05cefe0de4ae961fdee566531a0a 100644 (file)
@@ -385,7 +385,7 @@ const SwitcherList = new Lang.Class({
 
         let n = this._items.length;
         bbox.connect('clicked', Lang.bind(this, function() { this._onItemClicked(n); }));
-        bbox.connect('enter-event', Lang.bind(this, function() { this._onItemEnter(n); }));
+        bbox.connect('motion-event', Lang.bind(this, function() { return this._onItemEnter(n); }));
 
         bbox.label_actor = label;
 
@@ -399,7 +399,11 @@ const SwitcherList = new Lang.Class({
     },
 
     _onItemEnter: function (index) {
-        this._itemEntered(index);
+        // Avoid reentrancy
+        if (index != this._currentItemEntered) {
+            this._currentItemEntered = index;
+            this._itemEntered(index);
+        }
         return Clutter.EVENT_PROPAGATE;
     },